<<<(main)#if !defined($(base_name)_S_DEFAULT_ACK_H_INCLUDED_H)
#define $(base_name)_S_DEFAULT_ACK_H_INCLUDED_H

namespace $(service_name)
{
<<<(methods,client_side&have_ack)
<<<(comments)
//$(comment)>>>
class Mc_ack_default_$(method_name) : public I_$(method_name)_c
{
	bool bNotTraceOut_;
public:
	Mc_ack_default_$(method_name)(bool bNotTraceOut = false);
	virtual ~Mc_ack_default_$(method_name)();
<<<(out_args)<<<(comments,have_element)
	//$(arg_name)>>><<<(comments):$(comment)>>>>>>
	virtual void on_ack(const map<string, string>& context<<<(out_args), $(const_arg_ref_type) $(arg_name)>>>);
<<<(exceptions)<<<(comments)
	//$(comment)>>><<<(exception_members)<<<(comments,have_element)
	//$(arg_name)>>><<<(comments):$(comment)>>>>>>
	virtual void on_exception_$(exception_type)(const map<string, string>& context<<<(exception_members), $(const_arg_ref_type) $(arg_name)>>>);>>>

	virtual void on_exception(long pktype, const map<string, string>& context, long exceptionNo, const string& reason);
};
class Mc_ack_delay_$(method_name) : public I_$(method_name)_c, public McDelayHandlerBase
{
	IResponseSaver* saver_;
	typedef void (Mc_ack_delay_$(method_name)::*FN_MSG)(istrstream& is);
	map<string, FN_MSG> funcMap_;
	I_$(method_name)_c* handler_;
	bool b_delete_handler_;

	virtual void on_exception(long pktype, const map<string, string>& context, long exceptionNo, const string& reason);
	void fn_on_exception(istrstream& is);
	virtual void on_ack(const map<string, string>& context<<<(out_args), $(const_arg_ref_type) $(arg_name)>>>);
	void fn_on_ack(istrstream& is);
<<<(exceptions)	virtual void on_exception_$(exception_type)(const map<string, string>& context<<<(exception_members), $(const_arg_ref_type) $(arg_name)>>>);
	void fn_on_exception_$(exception_type)(istrstream& is);
>>>
	virtual void execute(const string& fun_name, istrstream& is);
	void save_new_delay(ostrstream& os);
public:
	Mc_ack_delay_$(method_name)(IResponseSaver* saver, I_$(method_name)_c* handler = new Mc_ack_default_$(method_name));
	virtual ~Mc_ack_delay_$(method_name)();
};
>>>

class IDefaultAckImpl_s : public IDefaultAck_s
{
public:
<<<(methods,client_side&have_ack)	virtual I_$(method_name)_c* new_default_ack_of_$(method_name)_c(void);
>>>};

class ICallExceptionImpl_s : public ICallException_s
{
public:
<<<(methods,client_side&!have_ack)	virtual void $(method_name)_c_exception(long lngSerialNo, const map<string, string>& context, long exceptionNo, const string& reason);
>>>};
};
#endif // !defined($(base_name)_S_DEFAULT_ACK_H_INCLUDED_H)>>>